/*!
 *  @brief     单例模板类
 *  @details   快速提供单例子模板
 *  @author    Will.Yin
 *  @version   v1.0
 *  @date      2017-12-11
 *  @copyright Eoslift.
 *  @note
 *  使用实例： Singleton<Common::StyleHandler>::instance()->dynamicLoadStyle(sttStylePath2);

 */
#ifndef SINGLETON_H
#define SINGLETON_H

#include <QObject>

#include "common_global.h"

/*!
    模板类和函数只是可复用的源代码，是不需要导出的，
    只需在调用时#include头文件就行。因为模板要在实例化之后才会生成obj，进而链接成DLL。
*/
template<class T>
class Singleton
{
    //使用默认构造和析构函数
    Singleton() = default;
    ~Singleton() = default;
public:

    //删除默认的移动、拷贝、赋值、取址
    Singleton(Singleton  &&) = delete;
    Singleton(const Singleton  &) = delete;
    void operator = (const Singleton &) = delete;
    T *operator &() = delete;

    //获取实例，对此处有异议也可自行查阅资料
    static T* instance()
    {
        static T object;
        return &object;
    }

};

#endif // RSINGLETON_H
